home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / pascal / tpznewg.zip / TPZUNIX.U < prev    next >
Text File  |  1990-01-13  |  3KB  |  106 lines

  1. UNIT TPZunix;
  2. INTERFACE
  3. USES Dos;
  4. {file date and time functions}
  5.  
  6. FUNCTION Z_ToUnixDate(fdate: LONGINT): STRING;
  7. FUNCTION Z_FromUnixDate(s: STRING): LONGINT;
  8.  
  9. IMPLEMENTATION
  10.  
  11. CONST
  12.    C1970 = 2440588;
  13.    D0 =    1461;
  14.    D1 =  146097;
  15.    D2 = 1721119;
  16.  
  17. Procedure GregorianToJulianDN(Year, Month, Day : Integer;
  18.                                   var JulianDN : LongInt);
  19. var
  20.   Century,
  21.   XYear    : LongInt;
  22.  
  23. begin {GregorianToJulianDN}
  24.   If Month <= 2 then begin
  25.     Year := pred(Year);
  26.     Month := Month + 12;
  27.   end;
  28.   Month := Month - 3;
  29.   Century := Year div 100;
  30.   XYear := Year mod 100;
  31.   Century := (Century * D1) shr 2;
  32.   XYear := (XYear * D0) shr 2;
  33.   JulianDN := ((((Month * 153) + 2) div 5) + Day) + D2
  34.                                     + XYear + Century;
  35. end; {GregorianToJulianDN}
  36.  
  37. Procedure JulianDNToGregorian(JulianDN : LongInt;
  38.                   var Year, Month, Day : Integer);
  39. var
  40.   Temp,
  41.   XYear   : LongInt;
  42.   YYear,
  43.   YMonth,
  44.   YDay    : Integer;
  45. begin {JulianDNToGregorian}
  46.   Temp := (((JulianDN - D2) shl 2) - 1);
  47.   XYear := (Temp mod D1) or 3;
  48.   JulianDN := Temp div D1;
  49.   YYear := (XYear div D0);
  50.   Temp := ((((XYear mod D0) + 4) shr 2) * 5) - 3;
  51.   YMonth := Temp div 153;
  52.   If YMonth >= 10 then begin
  53.     YYear := YYear + 1;
  54.     YMonth := YMonth - 12;
  55.     end;
  56.   YMonth := YMonth + 3;
  57.   YDay := Temp mod 153;
  58.   YDay := (YDay + 5) div 5;
  59.   Year := YYear + (JulianDN * 100);
  60.   Month := YMonth;
  61.   Day := YDay;
  62. end; {JulianDNToGregorian}
  63.  
  64. FUNCTION Z_ToUnixDate(fdate: LONGINT): STRING;
  65. VAR
  66.    dt: DateTime;
  67.    secspast, datenum, dayspast: LONGINT;
  68.    s: STRING;
  69. BEGIN
  70.    UnpackTime(fdate,dt);
  71.    GregorianToJulianDN(dt.year,dt.month,dt.day,datenum);
  72.    dayspast := datenum - c1970;
  73.    secspast := dayspast * 86400;
  74.    secspast := secspast + dt.hour * 3600 + dt.min * 60 + dt.sec;
  75.    s := '';
  76.    WHILE (secspast <> 0) AND (Length(s) < 255) DO
  77.    BEGIN
  78.       s := Chr((secspast AND 7) + $30) + s;
  79.       secspast := (secspast SHR 3)
  80.    END;
  81.    s := '0' + s;
  82.    Z_ToUnixDate := s
  83. END;
  84.  
  85. FUNCTION Z_FromUnixDate(s: STRING): LONGINT;
  86. VAR
  87.    dt: DateTime;
  88.    secspast, datenum: LONGINT;
  89.    n: WORD;
  90. BEGIN
  91.    secspast := LONGINT(0);
  92.    FOR n := 1 TO Length(s) DO
  93.       secspast := (secspast SHL 3) + Ord(s[n]) - $30;
  94.    datenum := (secspast DIV 86400) + c1970;
  95.    JulianDNToGregorian(datenum,INTEGER(dt.year),INTEGER(dt.month),INTEGER(dt.day));
  96.    secspast := secspast MOD 86400;
  97.    dt.hour := secspast DIV 3600;
  98.    secspast := secspast MOD 3600;
  99.    dt.min := secspast DIV 60;
  100.    dt.sec := secspast MOD 60;
  101.    PackTime(dt,secspast);
  102.    Z_FromUnixDate := secspast
  103. END;
  104.  
  105. END.
  106.